"use strict"
/**
 * @name item
 * 道具操作
 */

const ITEMUSETYPE = {};

const ITEM_USE_MAX = 50;

/**
 * @name use
 * @param string key 物品唯一ID
 * @param int num 使用数量
 * 使用道具
 */
exports.use = async function () {
    let key = this.get('key', 'string');
    let num = this.get('num', 'int');
    if (!key || num < 1) {
        return this.error('id empty')
    }
    if (num > ITEM_USE_MAX) {
        return this.quick_error('M2PIP311', '一次不能超过50个宝箱');
    }
    this.updater.item.key(key);
    await this.updater.data();
    let ty = this.updater.item.get(key);
    if (!ty) {
        return this.error(`item[${key}] error`)
    }
    let itemConfig = this.config("box", ty["id"]);
    if (!itemConfig) {
        return this.error("config_not_exist", "box", ty["id"]);
    }
    // if(!itemConfig["onuse"]){
    //     return this.error("item not onuse");
    // }
    // let k = itemConfig["itemList"];
    // let k =1
    // if(!ITEMUSETYPE[k]){
    //     return this.error("item usetype unknown");
    // }
    this.updater.item.sub(key, num);
    let args = itemConfig["itemList"];
    let arr = [];
    for (let i = 0; i < num; i++) {
        arr.push(ITEMUSETYPE[1].apply(this, args));
    }
    await Promise.all(arr);
    return this.updater.save();
}

//获得道具，参数为物品组或者礼包
ITEMUSETYPE[1] = function () {
    for (let k of arguments) {
        if (k) {
            if (k["id"] > 0 && k["num"] > 0) {
                this.updater.add(k["id"], k["num"]);
            }
        }
    }
}


/**
 * @name pickItem
 * @param string key 物品唯一ID
 * @param string choose 选择列表,itemID:chooseNum;itemID2:chooseNum2;
 * @param int num 使用数量
 * 手选礼包
 */
exports.pickItem = async function () {
    const key = this.get('key', 'string');
    // const choose = this.get('choose', 'int')||0;
    // const choose = this.get('choose', 'string');
    // if (!choose) {
    //     return this.quick_error('M2saghge140', ' 参数错误');
    // }
    const sub = this.get('choose', 'string').trim();
    if (!sub) {
        return this.quick_error('M2saghge140', '必须有消耗品');
    }
    let choose = {};
    let arrSub = sub.split(",");
    for (let s of arrSub) {
        if (!s) {
            return this.quick_error('M2saghge150', '消耗品不能为空');
        }
        let chooseData = s.split(":");
        choose[chooseData[0]] = parseInt(chooseData[1]);
    }
    const num = this.get('num', 'int') || 0;
    if (num > ITEM_USE_MAX) {
        return this.quick_error('M2PIP312', '一次不能超过50个宝箱');
    }
    if (!key) {
        return this.quick_error('M2PIP1', 'id empty');
    }
    if (num <= 0) {
        return this.quick_error('M2PIP111', '开启数量不能为0');
    }
    this.updater.item.key(key);
    await this.updater.data();
    const ty = this.updater.item.get(key);
    if (!ty) {
        return this.quick_error('M2PIP2', `item[${key}] error`)
    }
    this.updater.item.sub(key, num);
    const itemConfig = this.config("box", ty["id"]);
    if (!itemConfig) {
        return this.quick_error('M2PIP3', "config_not_exist", "pickPacks", ty["id"]);
    }
    //TODO：验证选择的物品是否符合要求
    if (itemConfig.type != 1) {
        return this.quick_error('M2PIP3', "不是手选礼包", "box", ty["id"]);
    }
    const itemGroupConfig = this.config("itemGroup", itemConfig.itemList[0].id);
    if (!itemGroupConfig) {
        return this.quick_error('M2PIP3', "config_not_exist", "pickPacks", ty["id"]);
    }
    let chooseNum = 0;
    for (let i in choose) {
        if (i) {
            chooseNum += choose[i];
        }
    }
    if (chooseNum != num) {
        return this.quick_error('M2PIP4', "选择物品数量不匹配");
    }
    for (let i in choose) {
        let flag = false;
        for (let k = 0; k < itemGroupConfig.Coll.length; k++) {
            if (itemGroupConfig.Coll[k].key == i) {
                flag = true;
                this.updater.item.add(parseInt(i), choose[i] * itemGroupConfig.Coll[k].num);
                break;
            }
        }
        if (!flag) {
            return this.quick_error('M2PIP4', "有物品不在盒子中");
        }
    }
    return this.updater.save();

    // let args = itemConfig["items"].slice(1);
    // return Promise.resolve().then(()=>{
    //     let arr = [];
    //     for(let i=0;i<num;i++){
    //         arr.push(ITEMUSETYPE[k].apply(this,args));
    //     }
    //     return Promise.all(arr);
    // }).then(()=>{
    //     return this.updater.save();
    // })
}
